package com.learning.mybatis.practise.page.mapper;

import com.learning.mybatis.practise.page.entity.User;
import com.learning.mybatis.practise.page.plugin.PageParam;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * ClassName: IUserMapping
 * Description:
 * Date: 2020/7/22 9:56 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
@Repository
public interface IUserMapper {
    /**
     * 新增
     *
     * @param user
     * @return
     */
    int add(User user);

    /**
     * 删除
     *
     * @param id
     * @return
     */
    int delete(int id);

    /**
     * 更新
     *
     * @param user
     * @return
     */
    int update(User user);

    /**
     * 查询
     *
     * @param id
     * @return
     */
    User select(@Param("id") int id);


    /**
     * 批量处理
     *
     * @param userList
     * @return
     */
    int batchByForeach(@Param("userList") List<User> userList);

    /**
     * 使用 RowBounds 实现分页.
     * 【缺点】非物理分页，全部查询出来，内存中分页
     *
     * @param name
     * @param rowBounds
     * @return
     */
    List<User> selectByRowBounds(@Param("name") String name, RowBounds rowBounds);

    /**
     * 使用插件分页
     *
     * @param name
     * @param pageParam
     * @return
     */
    List<User> selectByPage(@Param("name") String name, PageParam pageParam);

}
